除錯用的ECK API
前言
很久之前要寫一直沒寫,
最近碰到問題,來還了。
正文
Primary Shard (提昇系統儲存容量)
-
shard 是 Elasticsearch 分散式儲存的基礎,包含 primary shard & replica shard
-
每一個 shard 就是一個 Lucene instance
-
primary shard 功能是將一份被索引後的資料,分散到多個 data node 上存放,實現儲存方面的水平擴展
-
primary shard 的數量在建立 index 時就會指定,後續是無法修改的,若要修改就必須要進行 reindex
Replica Shard (提高資料可用性)
-
replica shard 用來提供資料高可用性,當 primary shard 遺失時,replica shard 就可以被 promote 成 primary shard 來保持資料完整性
-
replica shard 數量可以動態調整,讓每個 data node 上都有完整的資料
-
replica shard 可以一定程度的提高讀取(查詢)的效能
-
若不設定 replica shard,一旦有 data node 故障導致 primary shard 遺失,資料可能就無法恢復了
-
ES 7.0 開始,primary shard 預設為
1
,replica shard 預設為0
ref. [Elasticsearch] 分散式特性 & 分散式搜尋的機制
Shard 的規劃 & 設定
-
primary shard 數量設定太小會遇到以下問題:
- 若 index 資料增加很快時,cluster 無法通過增加 node 數量對 index 進行資料擴展
- 單一 shard 資料太大,導致資料重新分配耗時
-
primary shard 數量設定太大會遇到以下問題:
- 導致每個 shard 容量很小,讓一個 data node 上有過多 shard 而影響效能
- 影響搜尋時的相關性算分,會讓統計結果失準
-
replica shard 若設定過多,會降低 cluster 整體的寫入效能
# 查node的狀態
GET _cluster/health/
# 取得目前所有的shard,加上?v 可顯示欄位名稱
GET _cat/shards?v
# 取得目前的shard設定數量(好幾次都是這個值暴了,導致log無法寫入)
GET /_cluster/settings
# 設定node的shard最大數量
PUT /_cluster/settings
{
"persistent": {
"cluster.max_shards_per_node": 1000
}
}
ref.